package com.cj.controller;

import com.cj.po.Visitor; // 导入Visitor类，用于表示访客信息
import com.cj.po.PageInfo; // 导入PageInfo类，用于分页信息的处理
import com.cj.service.VisitorService; // 导入VisitorService类，用于处理访客相关的业务逻辑
import org.springframework.beans.factory.annotation.Autowired; // 导入Autowired注解，用于依赖注入
import org.springframework.stereotype.Controller; // 导入Controller注解，标识该类为控制器
import org.springframework.ui.Model; // 导入Model类，用于传递数据到视图
import org.springframework.web.bind.annotation.RequestBody; // 导入RequestBody注解，用于处理请求体
import org.springframework.web.bind.annotation.RequestMapping; // 导入RequestMapping注解，用于定义请求路径
import org.springframework.web.bind.annotation.RequestMethod; // 导入RequestMethod类，用于定义请求方法
import org.springframework.web.bind.annotation.ResponseBody; // 导入ResponseBody注解，用于返回数据而不是视图
import javax.servlet.http.HttpSession; // 导入HttpSession类，用于管理用户会话
import java.util.List; // 导入List类，用于处理列表数据

/**
 * 访客管理控制器类，负责访客相关请求的处理
 */
@Controller
public class VisitorController {

    // 依赖注入
    @Autowired
    private VisitorService visitorService; // 访客服务，处理业务逻辑

    /**
     * 分页查询访客
     * @param v_name 访客姓名
     * @param pageIndex 当前页索引
     * @param pageSize 每页显示数量
     * @param model 用于向视图传递数据
     * @return 返回访客列表页面
     */
    @RequestMapping(value = "/findVisitor")
    public String findVisitor(String v_name, Integer pageIndex, Integer pageSize, Model model) {
        PageInfo<Visitor> visitorPageInfo = visitorService.findPageInfo(v_name, pageIndex, pageSize); // 获取分页信息
        model.addAttribute("visitorPageInfo", visitorPageInfo); // 添加分页信息到模型
        return "visitor_list"; // 返回访客列表页面
    }

    /**
     * 添加访客信息
     * @param visitor 访客对象，包含访客信息
     * @return 返回访客列表页面的重定向
     */
    @RequestMapping(value = "/addVisitor", method = RequestMethod.POST)
    @ResponseBody
    public String addVisitor(@RequestBody Visitor visitor) {
        visitorService.addVisitor(visitor); // 添加访客信息
        return "visitor_list"; // 返回访客列表页面
    }

    /**
     * 删除访客信息
     * @param v_id 访客ID
     * @return 返回访客列表页面的重定向
     */
    @RequestMapping("/deleteVisitor")
    @ResponseBody
    public String deleteVisitor(Integer v_id) {
        visitorService.deleteVisitor(v_id); // 删除指定ID的访客信息
        return "visitor_list"; // 返回访客列表页面
    }

    /**
     * 导出访客信息
     * @return 访客列表
     */
    @RequestMapping(value = "/exportVisitorList", method = RequestMethod.POST)
    @ResponseBody
    public List<Visitor> exportVisitorList() {
        List<Visitor> visitors = visitorService.getAllVisitors(); // 获取所有访客信息
        return visitors; // 返回访客列表
    }

    /**
     * 根据访客ID查询访客信息
     * @param v_id 访客ID
     * @param session 访客会话管理
     * @return 返回访客编辑页面
     */
    @RequestMapping("/findVisitorById")
    public String findVisitorById(Integer v_id, HttpSession session) {
        Visitor visitor = visitorService.findVisitorById(v_id); // 根据ID查询访客信息
        session.setAttribute("visitor", visitor); // 保存访客信息到会话中
        return "visitor_edit"; // 返回访客编辑页面
    }

    /**
     * 更新访客信息
     * @param visitor 访客对象，包含修改后的信息
     * @return 返回访客列表页面的重定向
     */
    @RequestMapping(value = "/updateVisitor", method = RequestMethod.POST)
    public String updateVisitor(Visitor visitor) {
        visitorService.updateVisitor(visitor); // 更新访客信息
        return "redirect:/findVisitor"; // 重定向到查询访客
    }
}
